package com.molichuxing.services.infrastructure.dao;

import com.molichuxing.framework.dao.RootMapper;
import com.molichuxing.framework.dto.TabDto;
import com.molichuxing.services.infrastructure.bean.StoreBean;
import com.molichuxing.services.infrastructure.dto.response.StoreCountDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 门店表 Mapper 接口
 * </p>
 *
 * @author zph
 * @since 2019-08-12
 */
public interface StoreMapper extends RootMapper<StoreBean> {

    /**
     * 根据条件分页查询count
     *
     * @param params
     * @return
     */
    long getPageCount(@Param("params") Map<String, Object> params);

    /**
     * 根据条件分页查询
     *
     * @param params
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<StoreBean> getPage(@Param("params") Map<String, Object> params, @Param("pageNum") int pageNum,
                            @Param("pageSize") int pageSize);

    /**
     * 通过经销商ID获取门店数量
     *
     * @param ids
     * @return
     */
    List<StoreCountDto> getStoreCountByDealerId(@Param("ids") List<Integer> ids);

    /**
     * 修改
     *
     * @param bean
     * @return
     */
    int modifyById(StoreBean bean);

    /**
     * 修改门店状态
     *
     * @param id
     * @param status
     * @return
     */
    int modifyStatusById(@Param("id") Integer id, @Param("status") Integer status, @Param("statusModifyType") Integer statusModifyType);

    /**
     * 根据经销商修改门店状态
     *
     * @param dealerId
     * @param status
     * @return
     */
    int modifyStatusByDealerId(@Param("dealerId") Integer dealerId, @Param("status") Integer status, @Param("statusModifyType") Integer statusModifyType);


    /**
     * 门店审核
     *
     * @param id
     * @param verifyStatus
     * @param rejectReason
     * @param remark
     * @return
     */
    int modifyVerifyStatus(@Param("id") Integer id, @Param("verifyStatus") Integer verifyStatus,
                           @Param("rejectReason") String rejectReason, @Param("remark") String remark);

    /**
     * 批量获取门店信息
     *
     * @param ids
     * @return
     */
    List<StoreBean> getBatchByIds(@Param("ids") List<Integer> ids);

    /**
     * 获取门店list
     *
     * @param params
     * @return
     */
    List<StoreBean> getList(@Param("params") Map<String, Object> params);

    /**
     * 获取所有门店
     *
     * @return
     */
    List<StoreBean> getAllList(@Param("status") Integer status);

    /**
     * 根据状态获取经销商数量
     *
     * @return
     */
    List<TabDto> getCountByStatus(@Param("dealerId") Integer dealerId);

    /**
     * 根据审核状态获取经销商数量
     *
     * @return
     */
    List<TabDto> getCountByVerifyStatus(@Param("dealerId") Integer dealerId);

    /**
     * 获取门店数量
     *
     * @return
     */
    int getCount(@Param("dealerId") Integer dealerId);

    /**
     * 通过经销商id查询获取门店集合
     *
     * @param dealerId
     * @return
     */
    List<Integer> getListByDealer(@Param("dealerId") Integer dealerId, @Param("status") Integer status);

    /**
     * 查询门店名称数量
     *
     * @param shortName
     * @return
     */
    int getCountByShortName(@Param("shortName") String shortName);

    /**
     * 查询门店全称数量
     *
     * @param fullName
     * @return
     */
    int getCountByFullName(@Param("fullName") String fullName);

    /**
     * 根据经销商id查询门店信息
     *
     * @param dealerId 经销商id
     * @return
     */
    List<StoreBean> getByDealer(@Param("dealerId") Integer dealerId);

    /**
     * 通过区域获取门店数量
     *
     * @param regionId
     * @return
     */
    int getCountByRegionId(@Param("regionId") Integer regionId, @Param("status") Integer status);

    /**
     * 获取门店城市
     *
     * @return
     */
    List<Integer> getRegionId(@Param("dealerId") Integer dealerId, @Param("status") Integer status);

    /**
     * 获取门店数量
     *
     * @param params
     * @return
     */
    int getStoreCount(@Param("params") Map<String, Object> params);

    /**
     * 批量获取门店信息
     *
     * @param ids
     * @return
     */
    List<StoreBean> getAllBatchByIds(@Param("ids") List<Integer> ids);

    /**
     * 获取门店信息-根据简称模糊查询
     *
     * @param shortName 门店简称
     * @return
     */
    List<StoreBean> getStoreByShortNameFuzzy(@Param("shortName") String shortName, @Param("status") Integer status, @Param("isShow") Integer isShow, @Param("dealerIdList") List<Integer> dealerIdList);

    /**
     * 获取门店信息
     * @param storeIdList
     * @param status
     * @param notIds 
     * @return
     */
	List<StoreBean> getStoreListByIdsAndStatus(@Param("ids")List<Integer> ids, @Param("status")Integer status, @Param("notIds")List<Integer> notIds);

}